package com.atguigu.gmall.search.bean;


import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;


/**
 * ES的核心概念： ES存的json
 * <p>
 * 数据库：  库  -  表结构（表结构    struct） -  记录     ---  列  --- 值
 * ES：    索引 - 文档结构（文档映射 mapping） -  一个文档  --- 属性  --- 值
 * <p>
 * 保存电影：
 * MySQL正排索引；(username字段建立索引) where id=1, where username like "张%"
 * 1 - 红海行动
 * 2 - 红海特工
 * 3 - 红海特工行动
 * 4 - 战狼特工
 * 5 - 战狼行动
 * 6 - 行动红海
 * <p>
 * ES【倒排索引】；（告诉ES某个字段要用来检索）； 分词
 * 红海：  1，2，3，6
 * 行动：  1,3，5,6
 * 特工：  2,3，4
 * 战狼：  4，5
 * <p>
 * 搜“红海行动”:  1，2，3，5,6。
 * 相关性评分：
 * 1-两个单词完全命中，顺序一致：10
 * 2-两个单词一半命中，顺序一致：5
 * 3-三个单词两个命中，顺序一致：6.6
 * 5-两个单词一半命中，顺序一致：5
 * 6-两个单词完全命中，顺序不一致：8
 * <p>
 * MySQL数据库存一个Person：
 * 1）、创建一个库：mall；创建一个表：t_person； 指定好表的结构
 * 2）、写一个接口 继承 BaseMapper；
 * 3）、Bean上标注MybatisPlus注解
 * <p>
 * ES存一个Person：
 * 1）、创建一个索引： PUT /mall
 * 2）、保存数据：   POST /mall/_doc/1  数据的json
 * 查询数据：
 * 新增： POST /mall/_doc/1  {json数据}
 * 查询： GET /mall/_doc/1
 * 删除： DELETE  /mall/_doc/1
 * 修改： PUT /mall/_doc/1  {json数据}
 */
//shards：分片数；  分担存储
//replicas:副本数； 保证不出现单点故障。
//项目启动，索引会被自动创建
@Document(indexName = "person-data")
@Data
public class Person {
    @Id
    private Long id;

    @Field(type = FieldType.Text, analyzer = "ik_smart")
    private String username;

    @Field(type = FieldType.Text, analyzer = "ik_smart")  //全文检索
    private String address;

    //    @Field(type = FieldType.Date, format = DateFormat.custom,
//            pattern = "yyyy-MM-dd HH:mm:ss")
    @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date birthDay;

    @Field(type = FieldType.Long, index = false) //这个自动不用创建检索的倒排索引
    private Integer age;

}
